home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / Harvest C / MPW Int & Lib / Interfaces / Complex.h < prev    next >
Text File  |  1991-04-17  |  7KB  |  213 lines

  1. #ifndef __COMPLEX__
  2. #define __COMPLEX__
  3.  
  4. /************************************************************
  5.  
  6. Created: Monday, June 27, 1988 12:42:53 PM
  7.     Complex.h
  8.     C Interface to the Macintosh Libraries
  9.  
  10.  
  11.     Copyright Apple Computer, Inc. 1985-1988
  12.     All rights reserved.
  13.  
  14. ************************************************************/
  15.  
  16. #ifndef __SANE__ 
  17. #include <SANE.h>
  18. #endif
  19.  
  20. struct complex;
  21.  
  22. /*
  23.     NOTE to users of the complex class stream i/o functionality:
  24.     
  25.     In order to use the complex stream functionality prototyped by the two following 
  26.     function declarations one must include either <IOStream.h> or <Stream.h> before
  27.     including <Complex.h>.
  28.  
  29. */
  30. #ifdef __IOSTREAM__
  31. ostream& operator<<(ostream&, complex);
  32.     istream& operator>>(istream&, complex&);
  33. #endif
  34.     
  35. struct complex {
  36.     extended    re;
  37.     extended    im;
  38.     
  39. #ifdef __cplusplus
  40.  
  41.         complex() { re =0.0; im =0.0; }
  42.         complex(extended r, extended i =0.0) { re =r; im =i; }
  43.  
  44.     friend extended real(const complex);
  45.     friend extended imag(const complex);
  46.     friend extended abs(complex);
  47.     friend extended norm(complex);
  48.     friend extended arg(complex);
  49.  
  50.     friend complex    acos(complex);
  51.     friend complex    acosh(complex);
  52.     friend complex    asin(complex);
  53.     friend complex    asinh(complex);
  54.     friend complex    atan(complex);
  55.     friend complex    atanh(complex);
  56.     friend complex    conj(complex);
  57.     friend complex    cos(complex);
  58.     friend complex    cosh(complex);
  59.     friend complex    exp(complex);
  60.     friend complex    log(complex);
  61.     friend complex    pow(complex, complex);
  62.     friend complex    pow(complex, long);
  63.     friend complex    pow(complex, extended);
  64.     friend complex    pow(extended, complex);
  65.     friend complex    polar(extended, extended);
  66.     friend complex    sin(complex);
  67.     friend complex    sinh(complex);
  68.     friend complex    sqrt(complex);
  69.     friend complex    sqr(complex);
  70.     friend complex    tan(complex);
  71.     friend complex    tanh(complex);
  72.     friend complex    operator +(complex, complex);
  73.     friend complex    operator -(complex, complex);
  74.     friend complex    operator -(complex);
  75.     friend complex    operator *(complex, complex);    
  76.     friend complex    operator *(complex, extended);
  77.     friend complex    operator *(extended, complex);
  78.     friend complex    operator /(complex, complex);
  79.     friend complex    operator /(complex, extended);
  80.     friend complex    operator /(extended, complex);
  81.     friend int        operator ==(complex, complex);
  82.     friend int        operator !=(complex, complex);
  83.     complex     operator +=(complex);
  84.     complex     operator -=(complex);
  85.     complex     operator *=(complex);
  86.     complex     operator *=(extended);
  87.     complex     operator /=(complex);
  88.     complex     operator /=(extended);
  89.  
  90. #endif
  91. };
  92.  
  93.  
  94.  
  95. #ifndef __cplusplus
  96. typedef struct complex complex;
  97. #else
  98. extern "C" {
  99. #endif
  100.     
  101. complex cadd( complex x, complex y );
  102. complex csub( complex x, complex y );
  103. complex cmul( complex x, complex y );
  104. complex cdiv( complex x, complex y );
  105. complex xdivc( extended x, complex y );
  106. complex csqrt( complex z );
  107. complex csin( complex z );
  108. complex ccos( complex z );
  109. complex csquare( complex z );
  110. complex cexp( complex z );
  111. complex clog( complex z );
  112. complex cepwry( extended x, complex y );
  113. complex cxpwri( complex x, long y );
  114. complex cxpwre( complex x, extended y );
  115. complex cxpwry( complex x, complex y );
  116. complex csinh( complex z );
  117. complex ccosh( complex z );
  118. complex ctanh( complex z );
  119. complex ctan( complex z );
  120. complex casin( complex z );
  121. complex casinh( complex z );
  122. complex cacos( complex z );
  123. complex cacosh( complex z );
  124. complex catan( complex z );
  125. complex catanh( complex z );
  126. complex cconj( complex z );
  127.  
  128. extended cabs( complex z );
  129. extended carg( complex z );
  130.  
  131. #ifdef __cplusplus
  132. }    // close the extern "C" declaration
  133.  
  134. inline extended    real(const complex a)    { return a.re; }
  135. inline extended imag(const complex a)    { return a.im; }
  136. inline extended abs(complex a)    { return cabs(a); }
  137. inline extended norm(complex a)    { return a.re*a.re+a.im*a.im; }
  138. inline extended arg(complex a)    { return carg(a); }
  139. inline complex    acos(complex a)    { return cacos(a); }
  140. inline complex    acosh(complex a)    { return cacosh(a); }
  141. inline complex    asin(complex a)    { return casin(a); }
  142. inline complex    asinh(complex a)    { return casinh(a); }
  143. inline complex    atan(complex a)    { return catan(a); }
  144. inline complex    atanh(complex a)    { return catanh(a); }
  145. inline complex    conj(complex a)    { return complex(a.re, -a.im); }
  146. inline complex    cos(complex a)    { return ccos(a); }
  147. inline complex    cosh(complex a)    { return ccosh(a); }
  148. inline complex    exp(complex a)    { return cexp(a); }
  149. inline complex    log(complex a)    { return clog(a); }
  150. inline complex    pow(complex a, complex b)    { return cxpwry(a, b); }
  151. inline complex    pow(complex a, long b)    { return cxpwri(a, b); }
  152. inline complex    pow(complex a, extended b)    { return cxpwre(a, b); }
  153. inline complex    pow(extended a, complex b) { return cepwry(a, b); }
  154. inline complex    polar(extended r, extended theta)    { return complex(r*cos(theta), r*sin(theta) ); }
  155. inline complex    sin(complex a)    { return csin(a); }
  156. inline complex    sinh(complex a)    { return csinh(a); }
  157. inline complex    sqrt(complex a)    { return csqrt(a); }
  158. inline complex    sqr(complex a)    { return csquare(a); }
  159. inline complex    tan(complex a)    { return ctan(a); }
  160. inline complex    tanh(complex a)    { return ctanh(a); }
  161. inline complex    operator +(complex a, complex b)    { return complex(a.re+b.re, a.im+b.im); }
  162. inline complex    operator -(complex a,complex b)    { return complex(a.re-b.re, a.im-b.im); }
  163. inline complex    operator -(complex a)    { return complex(-a.re, -a.im); }
  164. inline complex    operator *(complex a, complex b)    { return cmul(a, b); }    
  165. inline complex    operator *(complex a, extended b)    { return complex(a.re*b, a.im*b); }
  166. inline complex    operator *(extended a, complex b)    { return complex(a*b.re, a*b.im); }
  167. inline complex    operator /(complex a, complex b)    { return cdiv(a, b); }
  168. inline complex    operator /(complex a, extended b) { return complex(a.re/b, a.im/b); }
  169. inline complex    operator /(extended a, complex b)    { return xdivc(a, b); }
  170. inline int        operator ==(complex a, complex b)    { return (a.re==b.re && a.im==b.im); }
  171. inline int        operator !=(complex a, complex b)    { return (a.re!=b.re || a.im!=b.im); }
  172.  
  173. inline complex complex::operator +=(complex a)
  174. {
  175.     re += a.re;
  176.     im += a.im;
  177.     return complex(re, im);
  178. }
  179.  
  180. inline complex complex::operator -=(complex a)
  181. {
  182.     re -= a.re;
  183.     im -= a.im;
  184.     return complex(re, im);
  185. }
  186.  
  187. inline complex complex::operator *=(complex a)
  188. {
  189.     return *this = cmul(*this, a);
  190. }
  191.  
  192. inline complex complex::operator *=(extended a)
  193. {
  194.     re *= a;
  195.     im *= a;
  196.     return complex(re, im);
  197. }
  198.  
  199. inline complex complex::operator /=(complex a)
  200. {
  201.     return *this = cdiv(*this, a);
  202. }
  203.  
  204. inline complex complex::operator /=(extended a)
  205. {
  206.     re /= a;
  207.     im /= a;
  208.     return complex(re, im);
  209. }
  210.  
  211. #endif
  212.  
  213. #endif